package com.bonuo.crm.service.impl;

import com.bonuo.crm.domain.ProductInfo;
import com.bonuo.crm.mapper.ProductInfoMapper;
import com.bonuo.crm.service.ProductInfoService;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 产品信息Service实现
 */
@Service
public class ProductInfoServiceImpl implements ProductInfoService {
    @Autowired
    private ProductInfoMapper productInfoMapper;

    @Override
    public List<ProductInfo> selectProductInfoList(ProductInfo productInfo) {
        return productInfoMapper.selectProductInfoList(productInfo);
    }

    @Override
    public int insertProductInfo(ProductInfo productInfo) {
        // 设置创建时间
        productInfo.setCreateTime(DateUtils.getNowDate());
        
        // 检查产品编号是否已存在
        if (checkProductCodeUnique(productInfo)) {
            throw new ServiceException("新增产品'" + productInfo.getProductName() + "'失败，产品编号已存在");
        }
        
        return productInfoMapper.insertProductInfo(productInfo);
    }

    @Override
    public int updateProductInfo(ProductInfo productInfo) {
        // 设置更新时间
        productInfo.setUpdateTime(DateUtils.getNowDate());
        
        // 检查产品编号是否已存在（排除当前产品）
        if (checkProductCodeUnique(productInfo)) {
            throw new ServiceException("修改产品'" + productInfo.getProductName() + "'失败，产品编号已存在");
        }
        
        return productInfoMapper.updateProductInfo(productInfo);
    }


    @Override
    public int deleteProductInfoById(Integer id) {
        return productInfoMapper.deleteProductInfoById(id);
    }

    @Override
    public String uploadProductImage(MultipartFile file) throws Exception {
        if (file == null || file.isEmpty()) {
            throw new ServiceException("上传文件不能为空");
        }
        
        // 限制文件类型为图片
        String extension = FileUploadUtils.getExtension(file);
        if (!FileUploadUtils.isAllowedExtension(extension, new String[]{"jpg", "jpeg", "png", "gif"})) {
            throw new ServiceException("上传文件格式不支持，请上传图片文件");
        }
        
        // 上传文件并返回路径
        return FileUploadUtils.upload(file);
    }

    /**
     * 检查产品编号是否唯一
     */
    private boolean checkProductCodeUnique(ProductInfo productInfo) {
        ProductInfo info = productInfoMapper.selectProductInfoByCode(productInfo.getProductCode());
        return info != null && !info.getId().equals(productInfo.getId());
    }
}